<%@page import="java.util.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<!-- 
		1、为什么要使用form标签呢？
		可以更快速地开发表单页面(避免集合迭代)，而且可以更快地进行表单回显(修改)
		2、注意：
		可以通过modelAttribute属性指定绑定的模型属性，若没有指定该属性，则
		默认从request域对象中读取command的表单bean，如果该属性也不存在，则会发生错误。
		即：SpringMVC认为表单bean是需要回显的，即便是首次进入也须如此。
		因此需要通过modelAttribute属性指定绑定的模型属性！！！
	 -->
	 <form:form action="${pageContext.request.contextPath}/emp" method="post" modelAttribute="employee">
	 	<form:errors path="*"></form:errors>
		<br/>
		<br/>
	 	<!-- path属性对应HTML表单标签的name属性 -->
	 	<c:if test="${employee.id == null}">
		 	LastName:<form:input path="lastName"/>
		 	<form:errors path="lastName"></form:errors>
		 	<br/>
	 	</c:if>
	 	<c:if test="${employee.id != null}">
	 		<form:hidden path="id"/>
	 		<%-- 对于_method不能使用form:hidden标签，因为modelAttribute对应的bean中没有_method属性 --%>
	 		<%--
	 		<form:hidden path="_method"/>
	 		--%>
	 		<input type="hidden" name="_method" value="put"/>
	 	</c:if>
	 	Email:<form:input path="email"/>
	 	<form:errors path="email"></form:errors>
	 	<br/>
	 	
	 	<%
	 		Map<String,String> genders = new HashMap<>();
	 		genders.put("1","Male");
	 		genders.put("0","Female");
	 		
	 		request.setAttribute("genders", genders);
	 	%>
	 	<!-- 这里无需再指明itemLabel和itemValue,SpringMVC标签会自动解析Map -->
	 	Gender:
	 	<br/>
	 	<form:radiobuttons path="gender" items="${genders }" delimiter="<br>"/>
	 	<br/>
	 	
	 	Department:<form:select path="department.id" items="${departments }"  itemLabel="departmentName" itemValue="id"></form:select>
	 	<br/>
	 	
	 	<%--
	 		1、数据转换
	 		2、数据格式化
	 		3、数据校验 
	 			1> 如何校验？
	 				① 使用JSR303验证标准
	 				② 加入Hibernate Validator验证框架的jar包
	 				③ 在SpringMVC的配置文件中添加<mvc:annotation-driven/>
	 				④ 需要在bean的属性上加入对应的注解
	 				⑤ 在目标方法Bean类型前加@Valid注解
	 			2>验证出错转到哪一个页面？
	 				注意:需校验的 Bean 对象和其绑定结果对象或错误对象时成对出现的，它们之间不允许声明其他的入参
	 			3>错误消息如何显示？如何把错误消息进行国际化？
	 	--%>
	 	Birth:<form:input path="birth"/>
	 	<form:errors path="birth"></form:errors>
	 	<br/>
	 	Salary:<form:input path="salary"/>
	 	<br/>
	 	<input type="submit" value="Submit"/>
	 </form:form>
	 
	 
	 <form action="testConversionServiceConverter" method="post">
	 	<!-- 
	 		形如：lastName-email-gender-department.id,例：xiaofang-xiaofang@163.com-0-105
	 	 -->
	 	<input type="text" name="employee" value=""/>
	 	<input type="submit" value="Submit"/>
	 </form>
</body>
</html>